<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>传输(transport) | ElasticSearch 7.7 权威指南中文版</title>
	<meta name="keywords" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <meta name="description" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
	<script>
	var _link = 'modules-transport.html';
    </script>
</head>
<body>
<div class="main-container">
    <section id="content">
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.7/modules-transport.html" rel="nofollow" target="_blank">https://www.elastic.co/guide/en/elasticsearch/reference/7.7/modules-transport.html</a>, 原文档版权归 www.elastic.co 所有<br/>本地英文版地址: <a href="../en/modules-transport.html" rel="nofollow" target="_blank">../en/modules-transport.html</a></div>
                        <!-- start body -->
                  <div class="page_header">
<strong>重要</strong>: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html" rel="nofollow">当前版本文档</a>。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch 权威指南 [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="setup.html">安装和设置</a></span>
»
<span class="breadcrumb-link"><a href="settings.html">配置 Elasticsearch</a></span>
»
<span class="breadcrumb-node">传输(transport)</span>
</div>
<div class="navheader">
<span class="prev">
<a href="transform-settings.html">« 转换设置</a>
</span>
<span class="next">
<a href="modules-threadpool.html">线程池 »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="modules-transport"></a>传输(transport)
</h2>
</div></div></div>
<p>
传输网络层用于集群内的节点之间的内部通信。

从一个节点到另一个节点的每个调用都使用传输层(例如，当一个 HTTP GET 请求由一个节点处理，而实际上应该由保存相关数据的另一个节点处理时)。

传输模块亦被用于 Elasticsearch Java API 中的 <code class="literal">TransportClient</code> 。
</p>
<p>
传输机制本质上是完全异步的，这意味着没有等待响应的阻塞线程。

使用异步通信的好处，首先就是解决了 <a href="http://en.wikipedia.org/wiki/C10k_problem" class="ulink" target="_top">C10k 问题</a>，也是分散(广播)/聚集操作(如 Elasticsearch 中的搜索)的理想解决方案。
</p>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="transport-settings"></a>传输设置
</h3>
</div></div></div>
<p>内部传输通过 TCP 进行通信。可以使用以下设置对其进行配置：</p>
<div class="informaltable">
<table border="1" cellpadding="4px">
<colgroup>
<col class="col_1">
<col class="col_2">
</colgroup>
<thead>
<tr>
<th align="left" valign="top">Setting</th>
<th align="left" valign="top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left" valign="top"><p><code class="literal">transport.port</code></p></td>
<td align="left" valign="top"><p>绑定端口的范围，默认为 <code class="literal">9300-9400</code>.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">transport.publish_port</code></p></td>
<td align="left" valign="top"><p>
集群中的其他节点在与此节点通信时应使用的端口。
当集群节点位于代理或防火墙之后，并且 <code class="literal">transport.port</code> 不能从外部直接访问时，此功能非常有用。
默认为通过 <code class="literal">transport.port</code>分配的实际端口。
</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">transport.bind_host</code></p></td>
<td align="left" valign="top"><p>
传输服务要绑定到的主机地址。
默认值为 <code class="literal">transport.host</code> (如果设置了) 或者 <code class="literal">network.bind_host</code>。
</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">transport.publish_host</code></p></td>
<td align="left" valign="top"><p>
为集群中要连接的节点发布的主机地址。<span class="remark">(原文: The host address to publish for nodes in the cluster to connect to. )</span>
默认值为 <code class="literal">transport.host</code> (如果设置了) 或者 <code class="literal">network.publish_host</code>。
</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">transport.host</code></p></td>
<td align="left" valign="top"><p>用于设置 <code class="literal">transport.bind_host</code> 和 <code class="literal">transport.publish_host</code></p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">transport.connect_timeout</code></p></td>
<td align="left" valign="top"><p>启动新连接的连接超时(以时间设置格式)。默认为 <code class="literal">30s</code></p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">transport.compress</code></p></td>
<td align="left" valign="top"><p>设置为 <code class="literal">true</code> 以在所有节点之间启用压缩(<code class="literal">DEFLATE</code>)。默认为 <code class="literal">false</code></p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">transport.ping_schedule</code></p></td>
<td align="left" valign="top"><p>
安排定期的应用程序级 ping 消息，以确保节点之间的传输连接保持活动状态。
在传输客户端中默认为 <code class="literal">5s</code>，在其他地方默认为 <code class="literal">-1</code>(表示禁用)。
最好正确配置 TCP keep-alives，而不是使用此功能，因为 TCP keep-alives 适用于所有类型的长连接，而不仅仅是传输连接。
</p></td>
</tr>
</tbody>
</table>
</div>
<p>它还使用通用 <a class="xref" href="modules-network.html" title="Network settings">网络设置</a>。</p>
<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="transport-profiles"></a>传输配置 (transport profiles)
</h4>
</div></div></div>
<p>Elasticsearch 允许使用 传输配置文件 绑定到不同接口上的多个端口。请看以下配置示例：</p>
<div class="pre_wrapper lang-yaml">
<pre class="programlisting prettyprint lang-yaml">transport.profiles.default.port: 9300-9400
transport.profiles.default.bind_host: 10.0.0.1
transport.profiles.client.port: 9500-9600
transport.profiles.client.bind_host: 192.168.0.1
transport.profiles.dmz.port: 9700-9800
transport.profiles.dmz.bind_host: 172.16.1.2</pre>
</div>
<p>
<code class="literal">default</code>配置是特殊的。
如果其他配置没有特别指定，它将用作这些配置文件的备用配置，并且指定了该节点如何与集群中其他节点进行连接。
</p>
<p>可以在每个传输配置上配置以下参数，如上例所示：</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<code class="literal">port</code>: 要绑定的端口
</li>
<li class="listitem">
<code class="literal">bind_host</code>: 要绑定的主机名
</li>
<li class="listitem">
<code class="literal">publish_host</code>: 在信息API中发布的主机名
</li>
<li class="listitem">
<code class="literal">tcp.no_delay</code>: 为此 socket 配置 <code class="literal">TCP_NO_DELAY</code><span class="remark">(TCP无延迟)</span> 选项
</li>
<li class="listitem">
<code class="literal">tcp.keep_alive</code>: 为此 socket 配置 <code class="literal">SO_KEEPALIVE</code> 选项
</li>
<li class="listitem">
<code class="literal">tcp.keep_idle</code>: 为此 socket 配置 <code class="literal">TCP_KEEPIDLE</code> 选项，它指定了在开始发送 TCP keepalive探测之前连接必须空闲的时间(秒)。
仅适用于Linux和Mac，并且需要JDK 11或更新版本。
默认为 <code class="literal">-1</code>，表示不在 socket 级别设置该选项，而是使用默认的系统配置。
</li>
<li class="listitem">
<code class="literal">tcp.keep_interval</code>: 为此 socket 配置 <code class="literal">TCP_KEEPINTVL</code> 选项，它指定了发送 TCP keepalive 探测之间的时间间隔(秒)。
仅适用于Linux和Mac，并且需要JDK 11或更新版本。
默认为 <code class="literal">-1</code>，表示不在 socket 级别设置该选项，而是使用默认的系统配置。
</li>
<li class="listitem">
<code class="literal">tcp.keep_count</code>: 为此 socket 配置 <code class="literal">TCP_KEEPCNT</code> 选项， 它指定了在断开连接之前可以在连接上发送的未确认 TCP keepalive 探测的数量。
仅适用于Linux和Mac，并且需要JDK 11或更新版本。
默认为 <code class="literal">-1</code>，表示不在 socket 级别设置该选项，而是使用默认的系统配置。
</li>
<li class="listitem">
<code class="literal">tcp.reuse_address</code>: 为此 socket 配置 <code class="literal">SO_REUSEADDR</code> 选项
</li>
<li class="listitem">
<code class="literal">tcp.send_buffer_size</code>: 配置 socket 的发送缓冲区大小
</li>
<li class="listitem">
<code class="literal">tcp.receive_buffer_size</code>: 配置 socket 的接收缓冲区大小
</li>
</ul>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="long-lived-connections"></a>空闲长连接 (long-lived idle connections)
</h4>
</div></div></div>
<p>
Elasticsearch 在集群中的每对节点之间打开许多 TCP 长连接，其中一些连接可能会长时间处于空闲状态。

尽管如此，Elasticsearch要求这些连接保持打开状态，如果任何节点间的连接被外部影响(如防火墙)而关闭，它会中断集群的运行。

配置网络以使 Elasticsearch 节点之间保持长时间的空闲连接是非常重要的，例如保留 <code class="literal">tcp.keep_alive</code>，并确保 keepalive 间隔小于任何可能导致空闲连接关闭的超时时间；或者，如果无法配置 keepalive，则通过设置 <code class="literal">transport.ping_schedule</code> 的方式。
</p>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="request-compression"></a>请求压缩 (request compression)
</h4>
</div></div></div>
<p>
默认情况下，<code class="literal">transport.compress</code> 设置为 <code class="literal">false</code>，集群节点之间的网络级请求压缩是禁用的。 

这个默认值通常对于本地集群通信是有意义的，因为压缩会带来显著的CPU成本，并且本地集群倾向于在节点之间建立快速的网络连接。  
</p>
<p>
<code class="literal">transport.compress</code> 设置总是配置本地集群请求压缩，并且是远程集群请求压缩的备用设置。  

如果你想以不同于本地请求压缩的方式配置远程请求压缩，可以在每个远程集群的基础上设置它，使用 <a class="xref" href="modules-remote-clusters.html#remote-cluster-settings" title="Remote cluster settings for all modes"><code class="literal">cluster.remote.${cluster_alias}.transport.compress</code> 设置</a>。
</p>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="response-compression"></a>响应压缩 (response compression)
</h4>
</div></div></div>
<p>
压缩设置不为 响应(response) 配置压缩。
如果入站请求被压缩，Elasticsearch 会压缩响应——即使没有启用压缩。
类似地，如果入站请求是未压缩的，那么 Elasticsearch 也不会压缩响应——即使启用了压缩。
</p>
</div>

</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="transport-tracer"></a>传输跟踪 (transport tracer)
</h3>
</div></div></div>
<p>
传输层有一个专用的跟踪记录器，当它被激活时，会记录传入和传出的请求。
通过将 <code class="literal">org.elasticsearch.transport.TransportService.tracer</code> 日志程序的级别设置为 <code class="literal">TRACE</code> 可以动态激活日志：
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT _cluster/settings
{
   "transient" : {
      "logger.org.elasticsearch.transport.TransportService.tracer" : "TRACE"
   }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/34.console"></div>
<p>
还可以使用一组 包含 和 排除 的通配符模式来控制要跟踪的操作。
默认情况下将跟踪每个请求，但 故障检测的ping请求 除外：
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT _cluster/settings
{
   "transient" : {
      "transport.tracer.include" : "*",
      "transport.tracer.exclude" : "internal:coordination/fault_detection/*"
   }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/35.console"></div>
</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="transform-settings.html">« 转换设置</a>
</span>
<span class="next">
<a href="modules-threadpool.html">线程池 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>